#pragma once

#include "FilesystemReader.h"
#include "CompositeFilter.h"
#include "Executor.h"
#include "algorithms/SelectorAlgorithm.h"

#include <vector>
#include <memory>

#include "types.h"

class FileDedupe {

public:

    FileDedupe(const std::shared_ptr<FilesystemReader>& fsreader, 
               const CompositeFilter& filter, 
               const std::shared_ptr<SelectorAlgorithm>& selector_alg_,
               const std::shared_ptr<Executor>& executor); 

    void process();

private:

    std::shared_ptr<FilesystemReader> fsreader_;
    CompositeFilter filter_;
    std::shared_ptr<SelectorAlgorithm> selector_alg_;
    std::shared_ptr<Executor> executor_;

    FilesType files_;
    FilePairsType input_pairs_;

    FilePairsType generatePairs();
};

